這邊開始是為了打資安戰士挑戰賽所做的彩蛋計畫練習,語言和框架是 Java Android SDK,再聲明一次彩蛋計畫的題目和比賽是不一樣的,我在IThome鐵人賽的文章也不會出現當時比賽的題目;另外因為當時這部分的筆記寫的比較趕比較凌亂,所以部分內容會由Chatgpt輔助撰寫,還請見諒。
下方程式碼片段全部都是擷取自 Secure Code Warrior 線上安全程式培訓平台,因為練習互動時的題目多半不會只有單一個檔案,可能涉及多個檔案、資料夾及多處地方修改,因此我的文章主要是針對最主要的區塊做修改及說明,若有不好理解的地方非常抱歉也還請見諒,也可以實際上去 Secure Code Warrior 玩玩看,搭配著互動,會更有感的學習哦~
onCreate()
方法中加入FLAG_SECURE
防止系統擷取畫面onPause()
或onStop()
,應主動隱藏或清除當前畫面的敏感資訊protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
accessToken = getIntent().getStringExtra("accessToken");
userId = getIntent().getStringExtra("userId");
if (TextUtils.isEmpty(accessToken) || TextUtils.isEmpty(userId)) {
finish();
return;
}
setContentView(R.layout.activity_home);
Button btnLogout = (Button) findViewById(R.id.btnLogout);
btnLogout.setOnClickListener(this);
txtAccountNumber = (TextView) findViewById(R.id.txtAccountNumber);
txtBalance = (TextView) findViewById(R.id.txtBalance);
txtDOB = (TextView) findViewById(R.id.txtDOB);
getProfileDataFromServer();
}
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台
解釋:
在這段程式碼中,txtAccountNumber
, txtBalance
, 和 txtDOB
都是可能包含敏感資訊的變數。這些資訊如果沒有進行適當的遮蔽或保護(例如部分隱藏賬號或生日資料),它們很容易被用戶無意間暴露給旁觀者。
import android.view.WindowManager;
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台
和
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,WindowManager.LayoutParams.FLAG_SECURE);
//程式碼片段擷取自 Secure Code Warrior 線上安全程式培訓平台
解釋:
在 Activity 的onCreate()
方法中加入FLAG_SECURE
防止系統擷取畫面